package com.nf.dbutils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ResourceCleanerUtils {

    /**
     * 因为工具类，不需要实例化，用私有的
     * 最好的方式是静态方法+接口来实现
     */
    private ResourceCleanerUtils() {}

    /**
     * 关闭连接
     * @param conn
     * @throws SQLException
     */
    public static void close(Connection conn) throws SQLException {
        if (conn!=null){
            conn.close();
        }
    }

    /**
     * 关闭结果集
     * @param rs
     * @throws SQLException
     */
    public static void close(ResultSet rs) throws SQLException {
        if (rs!=null){
            rs.close();
        }
    }

    /**
     * 关闭声明
     * @param stmt
     * @throws SQLException
     */
    public static void close(PreparedStatement stmt) throws SQLException {
        if (stmt!=null){
            stmt.close();
        }
    }

    /**
     * 安静地关连接
      * @param conn
     */
    public static void closeQuietly(Connection conn){
        try {
            close(conn);
        } catch (SQLException e) {
//            自己吞掉
        }
    }

    /**
     * 安静地关结果集
     * @param rs
     */
    public static void closeQuietly(ResultSet rs){
        try {
            close(rs);
        } catch (SQLException e) {
//            自己吞掉
        }
    }

    /**
     * 安静地关声明
     * @param stmt
     */
    public static void closeQuietly(PreparedStatement stmt){
        try {
            close(stmt);
        } catch (SQLException e) {
//            自己吞掉
        }
    }

    /**
     * 一般增删改用
     * @param conn
     * @param stmt
     */
    public static void closeQuietly(Connection conn,PreparedStatement stmt){
        try {
            closeQuietly(stmt);
        }finally {
            closeQuietly(conn);
        }
    }

    /**
     * 一般查询用
     * @param conn
     * @param stmt
     * @param rs
     */
    public static void closeQuietly(Connection conn,PreparedStatement stmt,ResultSet rs){
        try {
            closeQuietly(rs);
        }finally {
            try {
                closeQuietly(stmt);
            }finally {
                closeQuietly(conn);
            }
        }
    }
}
